﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>

//template<class T>
//T Add(const T& left, const T& right)
//{
//	return left + right;
//}
//
//
//int main()
//{
//	int a1 = 10, a2 = 20;
//	double d1 = 10.0, d2 = 20.0;
//	Add(a1, a2);
//	Add(d1, d2);
//
//	Add(a, (int)d);
//	return 0;
//}


//int Add(int left, int right)
//{
//	return left + right;
//}
// 通用加法函数
//template<class T>
//T Add(T left, T right)
//{
//	return left + right;
//}
//void Test()
//{
//	Add(1, 2); // 与非模板函数匹配，编译器不需要特化
//	Add<int>(1, 2); // 调用编译器特化的Add版本
//}
//
//int Add(int left, int right)
//{
//	return left + right;
//}
//
//template<class T1, class T2>
//T1 Add(T1 left, T2 right)
//{
//	return left + right;
//}
//
//void Test()
//{
//	Add(1, 2); 
//	Add(1, 2.0);
//}
//
//int main()
//{
//	Test();
//	return 0;
//}

//template<class T>
//class Vector
//{
//public:
//	Vector(size_t capacity = 10)
//		: _pData(new T[capacity])
//		, _size(0)
//		, _capacity(capacity)
//	{}
//
//	~Vector();
//
//	void PushBack(const T& data)；
//	void PopBack();
//
//	size_t Size() 
//	{ 
//		return _size; 
//	
//	}
//
//	T& operator[](size_t pos)
//	{
//		assert(pos < _size);
//		return _pData[pos];
//	}
//
//private:
//	T* _pData;
//	size_t _size;
//	size_t _capacity;
//};
//
//template <class T>
//Vector<T>::~Vector()
//{
//	if (_pData)
//		delete[] _pData;
//	_size = _capacity = 0;
//}

//using namespace std;
//class A
//{
//public:
//    A()
//    {
//        cout << "+ Constructor of A\n"; // 构造函数
//    }
//    ~A()
//    {
//        cout << "- Destructor of A\n"; // 析构函数
//    }
//};
//
//class B
//{
//public:
//    B()
//    {
//        cout << "+ Constructor of B\n";
//    }
//    ~B()
//    {
//        cout << "- Destructor of B\n";
//    }
//};
//
//class C
//{
//public:
//    C()
//    {
//        cout << "+ Constructor of C\n";
//    }
//    ~C()
//    {
//        cout << "- Destructor of C\n";
//    }
//};
//
//class D
//{
//public:
//    D()
//    {
//        cout << "+ Constructor of C\n";
//    }
//    ~D()
//    {
//        cout << "- Destructor of C\n";
//    }
//};
//
//C c;
//
//void main()
//
//{
//
//    A* pa = new A();
//
//    B b;
//
//    static D d;
//
//    delete pa;
//
//}

